#pragma warning disable 108
using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using Cephei;
using Cephei.Core;
using Cephei.Core.Generic;
using Microsoft.FSharp.Core;
using Cephei.QL.Math;
namespace Cephei.QL.Math.Matrixutilities
{
    /// <summary> 
	/// ! Given a real symmetric matrix S, the Schur decomposition finds the eigenvalues and eigenvectors of S. If D is the diagonal matrix formed by the eigenvalues and U the unitarian matrix of the eigenvectors we can write the Schur decomposition as \f[ S = U \cdot D \cdot U^T \, ,\f] where \f$ \cdot \f$ is the standard matrix product and  \f$ ^T  \f$ is the transpose operator. This class implements the Schur decomposition using the symmetric threshold Jacobi algorithm. For details on the different Jacobi transfomations see "Matrix computation," second edition, by Golub and Van Loan, The Johns Hopkins University Press  \test the correctness of the returned values is tested by checking their properties.
	/// </summary>
    [Guid ("D6438826-6EA9-454d-8EFC-D931D263268A"),ComVisible(true)]
	public interface ISymmetricSchurDecomposition 
	{
		///////////////////////////////////////////////////////////////
        // Methods
        //
        /// <summary> 
		/// 
		/// </summary>
		 Cephei.QL.Math.IArray Eigenvalues {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Cephei.QL.Math.IMatrix Eigenvectors {get;}
    }   

    /// <summary> 
	/// ! Given a real symmetric matrix S, the Schur decomposition finds the eigenvalues and eigenvectors of S. If D is the diagonal matrix formed by the eigenvalues and U the unitarian matrix of the eigenvectors we can write the Schur decomposition as \f[ S = U \cdot D \cdot U^T \, ,\f] where \f$ \cdot \f$ is the standard matrix product and  \f$ ^T  \f$ is the transpose operator. This class implements the Schur decomposition using the symmetric threshold Jacobi algorithm. For details on the different Jacobi transfomations see "Matrix computation," second edition, by Golub and Van Loan, The Johns Hopkins University Press  \test the correctness of the returned values is tested by checking their properties. Factory
	/// </summary>
   	[ComVisible(true)]
    public interface ISymmetricSchurDecomposition_Factory 
    {
        ///////////////////////////////////////////////////////////////
        // Factory methods
        //
        /// <summary> 
		/// 
		/// </summary>
	    ISymmetricSchurDecomposition Create (Cephei.QL.Math.IMatrix s);
    }
}

